import ACCESS_ENUM from "@/access/accessEnum";
import router from "@/router";
import checkAccess from "@/access/checkAccess";
import store from "@/store";

router.beforeEach(async (to, from, next) => {
  let loginUser = store.state.user.loginUser;
  //如果之前没有登录过，自动登录
  if (!loginUser || !loginUser.userRole) {
    // 加 await 是为了等用户登录成功之后，在执行后续的代码
    await store.dispatch("user/getLoginUser");
    //登录后重新给 loginUser赋值
    loginUser = store.state.user.loginUser;
  }
  const needAccess = (to.meta?.access as string) ?? ACCESS_ENUM.NOT_LOGIN;
  // 如果要跳转的页面需要登录
  if (needAccess !== ACCESS_ENUM.NOT_LOGIN) {
    console.log("++++++++");
    //如果没有登录，直接跳转到登录页面
    if (
      !loginUser ||
      !loginUser.userRole ||
      loginUser.userRole === ACCESS_ENUM.NOT_LOGIN
    ) {
      console.log("=======");
      //这里要设置重定向，方便登录之后跳转到原来的界面
      next(`/user/login?redirect=${to.fullPath}`);
      return;
    }
    //如果已经登录了，但权限不足，那么跳转到无权限页面
    if (!checkAccess(loginUser, needAccess)) {
      next("/noauth");
      return;
    }
  }
  next();
});
